package com.sxj.corejava.code17_模板模式;

import com.sxj.corejava.code08_常用类.泛型.CompareInterface;

import java.util.Arrays;
import java.util.Comparator;

/**
 * @author 石小俊
 */
public abstract class SortUtil {

    public static void main(String[] args) {
        int[] arr = {7, 3, 9, 1, 15, 8, 11, 2};
        SortUtil sortUtil = new SortUtilDesc();
        sortUtil.sort(arr);
        System.out.println(Arrays.toString(arr));
    }

    public void sort(int[] arr) {
        // 外层控制比较的轮数
        for (int i = 0; i < arr.length - 1; i++) {
            // 内层循环控制比较的次数
            for (int j = 0; j < arr.length - 1 - i; j++) {
                // 具体的比较规则
                // 由于具体的规则不是固定的,而是在使用的时候才能确定
                int result = compareTo(arr[j], arr[j + 1]);
                // 根据返回值判断是否更换顺序
                if (result > 0) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }

    abstract int compareTo(int i, int j);

}

class SortUtilDesc extends SortUtil {

    @Override
    public int compareTo(int i, int j) {
        return i - j;
    }
}

